找传奇、传世资源到传世资源站!

winform 玻璃按钮(仿vista)控件源码

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

from clipboardusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Drawing.Drawing2D;using System.Drawing.Text;using PushButtonState = System.Windows.Forms.VisualStyles.PushButtonState;namespace Glass{ /// <summary> /// Represents a glass button control. /// </summary> [ToolboxBitmap(typeof(GlassButton)), ToolboxItem(true), ToolboxItemFilter("System.Windows.Forms"), Description("Raises an event when the user clicks it.")] public partial class GlassButton : Button { #region " Constructors " /// <summary> /// Initializes a new instance of the <see cref="Glass.GlassButton" /> class. /// </summary> public GlassButton() { InitializeComponent(); timer.Interval = animationLength / framesCount; base.BackColor = Color.Transparent; BackColor = Color.Black; ForeColor = Color.White; OuterBorderColor = Color.White; InnerBorderColor = Color.Black; ShineColor = Color.White; GlowColor = Color.FromArgb(-7488001);//unchecked((int)(0xFF8DBDFF))); SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint, true); SetStyle(ControlStyles.Opaque, false); } #endregion #region " Fields and Properties " private Color _backColor; /// <summary> /// Gets or sets the background color of the control. /// </summary> /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the background color.</returns> [DefaultValue(typeof(Color), "Black")] public virtual new Color BackColor { get { return _backColor; } set { if (!_backColor.Equals(value)) { _backColor = value; UseVisualStyleBackColor = false; CreateFrames(); OnBackColorChanged(EventArgs.Empty); } } } /// <summary> /// Gets or sets the foreground color of the control. /// </summary> /// <returns>The foreground <see cref="T:System.Drawing.Color" /> of the control.</returns> [DefaultValue(typeof(Color), "White")] public virtual new Color ForeColor { get { return base.ForeColor; } set { base.ForeColor = value; } } private Color _innerBorderColor; /// <summary> /// Gets or sets the inner border color of the control. /// </summary> /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the color of the inner border.</returns> [DefaultValue(typeof(Color), "Black"), Category("Appearance"), Description("The inner border color of the control.")] public virtual Color InnerBorderColor { get { return _innerBorderColor; } set { if (_innerBorderColor != value) { _innerBorderColor = value; CreateFrames(); if (IsHandleCreated) { Invalidate(); } OnInnerBorderColorChanged(EventArgs.Empty); } } } private Color _outerBorderColor; /// <summary> /// Gets or sets the outer border color of the control. /// </summary> /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the color of the outer border.</returns> [DefaultValue(typeof(Color), "White"), Category("Appearance"), Description("The outer border color of the control.")] public virtual Color OuterBorderColor { get { return _outerBorderColor; } set { if (_outerBorderColor != value) { _outerBorderColor = value; CreateFrames(); if (IsHandleCreated) { Invalidate(); } OnOuterBorderColorChanged(EventArgs.Empty); } } } private Color _shineColor; /// <summary> /// Gets or sets the shine color of the control. /// </summary> /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the shine color.</returns> [DefaultValue(typeof(Color), "White"), Category("Appearance"), Description("The shine color of the control.")] public virtual Color ShineColor { get { return _shineColor; } set { if (_shineColor != value) { _shineColor = value; CreateFrames(); if (IsHandleCreated) { Invalidate(); } OnShineColorChanged(EventArgs.Empty); } } } private Color _glowColor; /// <summary> /// Gets or sets the glow color of the control. /// </summary> /// <returns>A <see cref="T:System.Drawing.Color" /> value representing the glow color.</returns> [DefaultValue(typeof(Color), "255,141,189,255"), Category("Appearance"), Description("The glow color of the control.")] public virtual Color GlowColor { get { return _glowColor; } set { if (_glowColor != value) { _glowColor = value; CreateFrames(); if (IsHandleCreated) { Invalidate(); } OnGlowColorChanged(EventArgs.Empty); } } } private bool _fadeOnFocus; /// <summary> /// Gets or sets a value indicating whether the button should fade in and fade out when it's getting and loosing the focus. /// </summary> /// <value><c>true</c> if fading with changing the focus; otherwise, <c>false</c>.</value> [DefaultValue(false), Category("Appearance"), Description("Indicates whether the button should fade in and fade out when it is getting and loosing the focus.")] public virtual bool FadeOnFocus { get { return _fadeOnFocus; } set { if (_fadeOnFocus != value) { _fadeOnFocus = value; } } } private bool _isHovered; private bool _isFocused; private bool _isFocusedByKey; private bool _isKeyDown; private bool _isMouseDown; private bool IsPressed { get { return _isKeyDown || (_isMouseDown && _isHovered); } } /// <summary> /// Gets the state of the button control. /// </summary> /// <value>The state of the button control.</value> [Browsable(false)] public PushButtonState State { get { if (!Enabled) { return PushButtonState.Disabled; } if (IsPressed) { return PushButtonState.Pressed; } if (_isHovered) { return PushButtonState.Hot; } if (_isFocused || IsDefault) { return PushButtonState.Default; } return PushButtonState.Normal; } } #endregion #region " Events " /// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.InnerBorderColor" /> property changes.</summary> [Description("Event raised when the value of the InnerBorderColor property is changed."), Category("Property Changed")] public event EventHandler InnerBorderColorChanged; /// <summary> /// Raises the <see cref="E:Glass.GlassButton.InnerBorderColorChanged" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param> protected virtual void OnInnerBorderColorChanged(EventArgs e) { if (InnerBorderColorChanged != null) { InnerBorderColorChanged(this, e); } } /// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.OuterBorderColor" /> property changes.</summary> [Description("Event raised when the value of the OuterBorderColor property is changed."), Category("Property Changed")] public event EventHandler OuterBorderColorChanged; /// <summary> /// Raises the <see cref="E:Glass.GlassButton.OuterBorderColorChanged" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param> protected virtual void OnOuterBorderColorChanged(EventArgs e) { if (OuterBorderColorChanged != null) { OuterBorderColorChanged(this, e); } } /// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.ShineColor" /> property changes.</summary> [Description("Event raised when the value of the ShineColor property is changed."), Category("Property Changed")] public event EventHandler ShineColorChanged; /// <summary> /// Raises the <see cref="E:Glass.GlassButton.ShineColorChanged" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param> protected virtual void OnShineColorChanged(EventArgs e) { if (ShineColorChanged != null) { ShineColorChanged(this, e); } } /// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.GlowColor" /> property changes.</summary> [Description("Event raised when the value of the GlowColor property is changed."), Category("Property Changed")] public event EventHandler GlowColorChanged; /// <summary> /// Raises the <see cref="E:Glass.GlassButton.GlowColorChanged" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param> protected virtual void OnGlowColorChanged(EventArgs e) { if (GlowColorChanged != null) { GlowColorChanged(this, e); } } #endregion #region " Overrided Methods " /// <summary> /// Raises the <see cref="E:System.Windows.Forms.Control.SizeChanged" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param> protected override void OnSizeChanged(EventArgs e) { CreateFrames(); base.OnSizeChanged(e); } /// <summary> /// Raises the <see cref="E:System.Windows.Forms.Control.Click" /> event. /// </summary> /// <param name="e">The <see cref="System.EventArgs" /> instance containing the event data.</param> protected override void OnClick(EventArgs e) { _isKeyDown = _isMouseDown = false; base.OnClick(e); } /// <summary> /// Raises the <see cref="E:System.Windows.Forms.Control.Enter" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param> protected override void OnEnter(EventArgs e) { _isFocused = _isFocusedByKey = true; base.OnEnter(e); if (_fadeOnFocus) { FadeIn(); } } /// <summary> /// Raises the <see cref="E:System.Windows.Forms.Control.Leave" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param> protected override void OnLeave(EventArgs e) { base.OnLeave(e); _isFocused = _isFocusedByKey = _isKeyDown = _isMouseDown = false; Invalidate(); if (_fadeOnFocus) { FadeOut(); } } /// <summary> /// Raises the <see cref="M:System.Windows.Forms.ButtonBase.OnKeyUp(System.Windows.Forms.KeyEventArgs)" /> event. /// </summary> /// <param name="e">A <see cref="T:System.Windows.Forms.KeyEventArgs" /> that contains the event data.</param> protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Space) { _isKeyDown = true; Invalidate(); } base.OnKeyDown(e); } /// <summary> /// Raises the <see cref="M:System.Windows.Forms.ButtonBase.OnKeyUp(System.Windows.Forms.KeyEventArgs)" /> event. /// </summary> /// <param name="e">A <see cref="T:System.Windows.Forms.KeyEventArgs" /> that contains the event data.</param> protected override void OnKeyUp(KeyEventArgs e) { if (_isKeyDown && e.KeyCode == Keys.Space) { _isKeyDown = false; Invalidate(); } base.OnKeyUp(e); } /// <summary> /// Raises the <see cref="E:System.Windows.Forms.Control.MouseDown" /> event. /// </summary> /// <param name="e">A <see cref="T:System.Windows.Forms.MouseEventArgs" /> that contains the event data.</param> protected override void OnMouseDown(MouseEventArgs e) { if (!_isMouseDown && e.Button == MouseButtons.Left) { _isMouseDown = true; _isFocusedByKey = false; Invalidate(); } base.OnMouseDown(e); } /// <summary> /// Raises the <see cref="E:System.Windows.Forms.Control.MouseUp" /> event. /// </summary> /// <param name="e">A <see cref="T:System.Windows.Forms.MouseEventArgs" /> that contains the event data.</param> protected override void OnMouseUp(MouseEventArgs e) { if (_isMouseDown) { _isMouseDown = false; Invalidate(); } base.OnMouseUp(e); } /// <summary> /// Raises the <see cref="M:System.Windows.Forms.Control.OnMouseMove(System.Windows.Forms.MouseEventArgs)" /> event. /// </summary> /// <param name="e">A <see cref="T:System.Windows.Forms.MouseEventArgs" /> that contains the event data.</param> protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (e.Button != MouseButtons.None) { if (!ClientRectangle.Contains(e.X, e.Y)) { if (_isHovered) { _isHovered = false; Invalidate(); } } else if (!_isHovered) { _isHovered = true; Invalidate(); } } } /// <summary> /// Raises the <see cref="E:System.Windows.Forms.Control.MouseEnter" /> event. /// </summary> /// <param name="e">The <see cref="System.EventArgs" /> instance containing the event data.</param> protected override void OnMouseEnter(EventArgs e) { _isHovered = true; FadeIn(); Invalidate(); base.OnMouseEnter(e); } /// <summary> /// Raises the <see cref="E:System.Windows.Forms.Control.MouseLeave" /> event. /// </summary> /// <param name="e">The <see cref="System.EventArgs" /> instance containing the event data.</param> protected override void OnMouseLeave(EventArgs e) { _isHovered = false; if (!(FadeOnFocus && _isFocusedByKey)) FadeOut(); Invalidate(); base.OnMouseLeave(e); } #endregion #region " Painting " /// <summary> /// Raises the <see cref="M:System.Windows.Forms.ButtonBase.OnPaint(System.Windows.Forms.PaintEventArgs)" /> event. /// </summary> /// <param name="e">A <see cref="T:System.Windows.Forms.PaintEventArgs" /> that contains the event data.</param> protected override void OnPaint(PaintEventArgs e) { DrawButtonBackgroundFromBuffer(e.Graphics); DrawForegroundFromButton(e); DrawButtonForeground(e.Graphics); if (Paint != null) { Paint(this, e); } } /// <summary> /// Occurs when the control is redrawn. /// </summary> public new event PaintEventHandler Paint; private void DrawButtonBackgroundFromBuffer(Graphics graphics) { int frame; if (!Enabled) { frame = FRAME_DISABLED; } else if (IsPressed) { frame = FRAME_PRESSED; } else if (!IsAnimating && _currentFrame == 0) { frame = FRAME_NORMAL; } else { if (!HasAnimationFrames) { CreateFrames(true); } frame = FRAME_ANIMATED _currentFrame; } if (_frames == null || _frames.Count == 0) { CreateFrames(); } graphics.DrawImage(_frames[frame], Point.Empty); } private Image CreateBackgroundFrame(bool pressed, bool hovered, bool animating, bool enabled, float glowOpacity) { Rectangle rect = ClientRectangle; if (rect.Width <= 0) { rect.Width = 1; } if (rect.Height <= 0) { rect.Height = 1; } Image img = new Bitmap(rect.Width, rect.Height); using (Graphics g = Graphics.FromImage(img)) { g.Clear(Color.Transparent); DrawButtonBackground(g, rect, pressed, hovered, animating, enabled, _outerBorderColor, _backColor, _glowColor, _shineColor, _innerBorderColor, glowOpacity); } return img; } private static void DrawButtonBackground(Graphics g, Rectangle rectangle, bool pressed, bool hovered, bool animating, bool enabled, Color outerBorderColor, Color backColor, Color glowColor, Color shineColor, Color innerBorderColor, float glowOpacity) { SmoothingMode sm = g.SmoothingMode; g.SmoothingMode = SmoothingMode.AntiAlias; #region " white border " Rectangle rect = rectangle; rect.Width--; rect.Height--; using (GraphicsPath bw = CreateRoundRectangle(rect, 4)) { using (Pen p = new Pen(outerBorderColor)) { g.DrawPath(p, bw); } } #endregion rect.X ; rect.Y ; rect.Width -= 2; rect.Height -= 2; Rectangle rect2 = rect; rect2.Height >>= 1; #region " content " using (GraphicsPath bb = CreateRoundRectangle(rect, 2)) { int opacity = pressed ? 0xcc : 0x7f; using (Brush br = new SolidBrush(Color.FromArgb(opacity, backColor))) { g.FillPath(br, bb); } } #endregion #region " glow " if ((hovered || animating) && !pressed) { using (GraphicsPath clip = CreateRoundRectangle(rect, 2)) { g.SetClip(clip, CombineMode.Intersect); using (GraphicsPath brad = CreateBottomRadialPath(rect)) { using (PathGradientBrush pgr = new PathGradientBrush(brad)) { int opacity = (int)(0xB2 * glowOpacity .5f); RectangleF bounds = brad.GetBounds(); pgr.CenterPoint = new PointF((bounds.Left bounds.Right) / 2f, (bounds.Top bounds.Bottom) / 2f); pgr.CenterColor = Color.FromArgb(opacity, glowColor); pgr.SurroundColors = new Color[] { Color.FromArgb(0, glowColor) }; g.FillPath(pgr, brad); } } g.ResetClip(); } } #endregion #region " shine " if (rect2.Width > 0 && rect2.Height > 0) { rect2.Height ; using (GraphicsPath bh = CreateTopRoundRectangle(rect2, 2)) { rect2.Height ; int opacity = 0x99; if (pressed | !enabled) { opacity = (int)(.4f * opacity .5f); } using (LinearGradientBrush br = new LinearGradientBrush(rect2, Color.FromArgb(opacity, shineColor), Color.FromArgb(opacity / 3, shineColor), LinearGradientMode.Vertical)) { g.FillPath(br, bh); } } rect2.Height -= 2; } #endregion #region " black border " using (GraphicsPath bb = CreateRoundRectangle(rect, 3)) { using (Pen p = new Pen(innerBorderColor)) { g.DrawPath(p, bb); } } #endregion g.SmoothingMode = sm; } private void DrawButtonForeground(Graphics g) { if (Focused && ShowFocusCues/* && isFocusedByKey*/) { Rectangle rect = ClientRectangle; rect.Inflate(-4, -4); ControlPaint.DrawFocusRectangle(g, rect); } } private Button _imageButton; private void DrawForegroundFromButton(PaintEventArgs pevent) { if (_imageButton == null) { _imageButton = new Button(); _imageButton.Parent = new TransparentControl(); _imageButton.SuspendLayout(); _imageButton.BackColor = Color.Transparent; _imageButton.FlatAppearance.BorderSize = 0; _imageButton.FlatStyle = FlatStyle.Flat; } else { _imageButton.SuspendLayout(); } _imageButton.AutoEllipsis = AutoEllipsis; if (Enabled) { _imageButton.ForeColor = ForeColor; } else { _imageButton.ForeColor = Color.FromArgb((3 * ForeColor.R _backColor.R) >> 2, (3 * ForeColor.G _backColor.G) >> 2, (3 * ForeColor.B _backColor.B) >> 2); } _imageButton.Font = Font; _imageButton.RightToLeft = RightToLeft; _imageButton.Image = Image; if (Image != null && !Enabled) { Size size = Image.Size; float[][] newColorMatrix = new float[5][]; newColorMatrix[0] = new float[] { 0.2125f, 0.2125f, 0.2125f, 0f, 0f }; newColorMatrix[1] = new float[] { 0.2577f, 0.2577f, 0.2577f, 0f, 0f }; newColorMatrix[2] = new float[] { 0.0361f, 0.0361f, 0.0361f, 0f, 0f }; float[] arr = new float[5]; arr[3] = 1f; newColorMatrix[3] = arr; newColorMatrix[4] = new float[] { 0.38f, 0.38f, 0.38f, 0f, 1f }; System.Drawing.Imaging.ColorMatrix matrix = new System.Drawing.Imaging.ColorMatrix(newColorMatrix); System.Drawing.Imaging.ImageAttributes disabledImageAttr = new System.Drawing.Imaging.ImageAttributes(); disabledImageAttr.ClearColorKey(); disabledImageAttr.SetColorMatrix(matrix); _imageButton.Image = new Bitmap(Image.Width, Image.Height); using (Graphics gr = Graphics.FromImage(_imageButton.Image)) { gr.DrawImage(Image, new Rectangle(0, 0, size.Width, size.Height), 0, 0, size.Width, size.Height, GraphicsUnit.Pixel, disabledImageAttr); } } _imageButton.ImageAlign = ImageAlign; _imageButton.ImageIndex = ImageIndex; _imageButton.ImageKey = ImageKey; _imageButton.ImageList = ImageList; _imageButton.Padding = Padding; _imageButton.Size = Size; _imageButton.Text = Text; _imageButton.TextAlign = TextAlign; _imageButton.TextImageRelation = TextImageRelation; _imageButton.UseCompatibleTextRendering = UseCompatibleTextRendering; _imageButton.UseMnemonic = UseMnemonic; _imageButton.ResumeLayout(); InvokePaint(_imageButton, pevent); if (_imageButton.Image != null && _imageButton.Image != Image) { _imageButton.Image.Dispose(); _imageButton.Image = null; } } private class TransparentControl : Control { protected override void OnPaintBackground(PaintEventArgs pevent) { } protected override void OnPaint(PaintEventArgs e) { } } private static GraphicsPath CreateRoundRectangle(Rectangle rectangle, int radius) { GraphicsPath path = new GraphicsPath(); int l = rectangle.Left; int t = rectangle.Top; int w = rectangle.Width; int h = rectangle.Height; int d = radius << 1; path.AddArc(l, t, d, d, 180, 90); // topleft path.AddLine(l radius, t, l w - radius, t); // top path.AddArc(l w - d, t, d, d, 270, 90); // topright path.AddLine(l w, t radius, l w, t h - radius); // right path.AddArc(l w - d, t h - d, d, d, 0, 90); // bottomright path.AddLine(l w - radius, t h, l radius, t h); // bottom path.AddArc(l, t h - d, d, d, 90, 90); // bottomleft path.AddLine(l, t h - radius, l, t radius); // left path.CloseFigure(); return path; } private static GraphicsPath CreateTopRoundRectangle(Rectangle rectangle, int radius) { GraphicsPath path = new GraphicsPath(); int l = rectangle.Left; int t = rectangle.Top; int w = rectangle.Width; int h = rectangle.Height; int d = radius << 1; path.AddArc(l, t, d, d, 180, 90); // topleft path.AddLine(l radius, t, l w - radius, t); // top path.AddArc(l w - d, t, d, d, 270, 90); // topright path.AddLine(l w, t radius, l w, t h); // right path.AddLine(l w, t h, l, t h); // bottom path.AddLine(l, t h, l, t radius); // left path.CloseFigure(); return path; } private static GraphicsPath CreateBottomRadialPath(Rectangle rectangle) { GraphicsPath path = new GraphicsPath(); RectangleF rect = rectangle; rect.X -= rect.Width * .35f; rect.Y -= rect.Height * .15f; rect.Width *= 1.7f; rect.Height *= 2.3f; path.AddEllipse(rect); path.CloseFigure(); return path; } #endregion #region " Unused Properties & Events " /// <summary>This property is not relevant for this class.</summary> /// <returns>This property is not relevant for this class.</returns> [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)] public new FlatButtonAppearance FlatAppearance { get { return base.FlatAppearance; } } /// <summary>This property is not relevant for this class.</summary> /// <returns>This property is not relevant for this class.</returns> [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)] public new FlatStyle FlatStyle { get { return base.FlatStyle; } set { base.FlatStyle = value; } } /// <summary>This property is not relevant for this class.</summary> /// <returns>This property is not relevant for this class.</returns> [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)] public new bool UseVisualStyleBackColor { get { return base.UseVisualStyleBackColor; } set { base.UseVisualStyleBackColor = value; } } #endregion #region " Animation Support " private List<Image> _frames; private const int FRAME_DISABLED = 0; private const int FRAME_PRESSED = 1; private const int FRAME_NORMAL = 2; private const int FRAME_ANIMATED = 3; private bool HasAnimationFrames { get { return _frames != null && _frames.Count > FRAME_ANIMATED; } } private void CreateFrames() { CreateFrames(false); } private void CreateFrames(bool withAnimationFrames) { DestroyFrames(); if (!IsHandleCreated) { return; } if (_frames == null) { _frames = new List<Image>(); } _frames.Add(CreateBackgroundFrame(false, false, false, false, 0)); _frames.Add(CreateBackgroundFrame(true, true, false, true, 0)); _frames.Add(CreateBackgroundFrame(false, false, false, true, 0)); if (!withAnimationFrames) { return; } for (int i = 0; i < framesCount; i ) { _frames.Add(CreateBackgroundFrame(false, true, true, true, (float)i / (framesCount - 1F))); } } private void DestroyFrames() { if (_frames != null) { while (_frames.Count > 0) { _frames[_frames.Count - 1].Dispose(); _frames.RemoveAt(_frames.Count - 1); } } } private const int animationLength = 300; private const int framesCount = 10; private int _currentFrame; private int _direction; private bool IsAnimating { get { return _direction != 0; } } private void FadeIn() { _direction = 1; timer.Enabled = true; } private void FadeOut() { _direction = -1; timer.Enabled = true; } private void timer_Tick(object sender, EventArgs e) { if (!timer.Enabled) { return; } Refresh(); _currentFrame = _direction; if (_currentFrame == -1) { _currentFrame = 0; timer.Enabled = false; _direction = 0; return; } if (_currentFrame == framesCount) { _currentFrame = framesCount - 1; timer.Enabled = false; _direction = 0; } } #endregion }}

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复